home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / kriegspi / xmain.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-06-30  |  3.1 KB  |  160 lines

  1. #ifndef lint
  2. static char rcsid[] = "$Header: xmain.c,v 1.7 87/05/19 17:19:25 schoch Exp $";
  3. #endif
  4.  
  5. #include <strings.h>
  6. #include <ctype.h>
  7. #include <sys/signal.h>
  8. #include <errno.h>
  9. #include "externs.h"
  10.  
  11. extern int errno;
  12.  
  13. LIST    dirlist[7];
  14. LIST    piecelocs[2];
  15. int    kingloc[2];
  16. u_char    whose[100];
  17. u_char    occupant[100];
  18. u_char    virgin[100];
  19. u_char    ghost[100];
  20. u_char    captured[32];
  21. u_char    ourcolor = UNSET;
  22. u_char    theircolor = UNSET;
  23. u_char    state = PLAYING, color=WHITE;
  24. bool    iamserver = UNSET;
  25. bool    drawok[2];
  26. bool    resign, dead;
  27. bool    reverse;
  28. u_char    option[NOPTIONS];
  29. int    pawndir[2] = { -10, 10 };
  30. int    lastmovefrom = 0;
  31. int    lastmoveto = 0;
  32. MOVELIST movelist = (MOVELIST)NULL;
  33.  
  34. Display *display;
  35. OpaqueFrame frame;
  36.  
  37. char *malloc();
  38. long random();
  39.  
  40. main(argc, argv)
  41. char **argv;
  42. {
  43.     int i;
  44.     u_short port=0;
  45.     char *displayname = NULL;
  46.     char *program;
  47.     char *geometry = NULL;
  48.     char *cp;
  49.  
  50.     if (program = rindex(argv[0], '/'))
  51.     program++;
  52.     else
  53.     program = argv[0];
  54.     for(i = 0; i < NOPTIONS; i++)
  55.     option[i] = UNSET;
  56.     srandom(time(0) ^ getpid());
  57.     argc--; argv++;
  58.     while (argc) {
  59.     if (*argv[0] == '-' || *argv[0] == '+') {
  60.         if (*argv[0] == '-')
  61.         i = FALSE;
  62.         else
  63.         i = TRUE;
  64.         while (*++(*argv))
  65.         switch (*argv[0]) {
  66.             case 'b':
  67.             option[COLOR] = BLACK;
  68.             break;
  69.             case 'w':
  70.             option[COLOR] = WHITE;
  71.             break;
  72.             case 'c':
  73.             option[COLOR] = RANDOM;
  74.             break;
  75.             case 'a':
  76.             option[ANNOUNCETAKES] = i;
  77.             break;
  78.             case 'p':
  79.             option[ANNOUNCEPAWNS] = i;
  80.             break;
  81.             case 'r':
  82.             reverse = TRUE;
  83.             break;
  84.             case 's':
  85.             iamserver = i;
  86.             break;
  87.             default:
  88.             goto usage;
  89.         }
  90.         argv++; argc--;
  91.         continue;
  92.     }
  93.     if ((cp = index(*argv, ':')) && isdigit(cp[1])) {
  94.         displayname = *argv;
  95.         argv++; argc--;
  96.         continue;
  97.     }
  98.     if (*argv[0] == '=') {
  99.         geometry = *argv;
  100.         argv++; argc--;
  101.         continue;
  102.     }
  103.     break;
  104.     }
  105.     if (argc != 1) {
  106. usage:
  107.     fprintf(stderr, "Usage: xks [-+][bwcaprs] [=[width]x[height][[+-]xoff[[+-]yoff]]]\n");
  108.     fprintf(stderr, "\t[display:name] user[@host]\n");
  109.     exit(1);
  110.     }
  111.  
  112.     display = XOpenDisplay(displayname);
  113.     if (display == NULL) {
  114.     fprintf(stderr, "Can't open display %s\n", displayname);
  115.     exit(1);
  116.     }
  117.  
  118.     frame.border = WhitePixmap;
  119.     frame.background = BlackPixmap;
  120.     frame.bdrwidth = 2;
  121.     window = XCreate("xks", program, geometry, "=0x0+0+0", &frame,
  122.     64*8+1, 64*9+18*3+TOPSPACE);
  123.     if (window == 0) {
  124.     fprintf(stderr, "Can't create window\n");
  125.     cleanup(1);
  126.     }
  127.  
  128.     XMapWindow(window);
  129.     initdirlists();
  130.     initpiecelocs();
  131.     font = XGetFont("timrom12bsx");
  132.     if (font == 0) {
  133.     fprintf(stderr, "Can't get font.\n");
  134.     }
  135.     screen_init();
  136.     p_init();
  137.     signal(SIGINT, cleanup);
  138.     message("Connecting...", MESSAGE);
  139.     XFlush();
  140.     connectport(*argv, port);
  141.     dooptions();
  142.     if (ourcolor == WHITE) {
  143.         message("--- WHITE ---", MESSAGE);
  144.         reverse = FALSE;
  145.     } else
  146.         message("--- BLACK ---", MESSAGE);
  147.     initboard(FALSE);
  148.     redraw();
  149.     movecycle();
  150. }
  151.  
  152. cleanup(sig)
  153. int sig;
  154. {
  155.     if (out)
  156.     fputs(out, "resign\r\n");
  157.     XCloseDisplay(display);
  158.     exit(sig);
  159. }
  160.